/**
 * FileName: TokenUtils
 * Author:   ghLiu
 * Date:     2021/6/3 11:06
 * Description: token 相关的工具类
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.spc.boot.common.util;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;


/**
 * token 相关的工具类，提供一些统一使用的方法
 *
 * @author ghLiu
 * @create 2021/6/3
 * @since 1.0.0
 */
public class TokenUtils {

    public static String aesKey;


    @Value("${spring.application.name}")
    private static String projectCode;


    static {
        String projectCodeMd5 = SecureUtils.getMD5(StringUtil.formatNullValue(projectCode, "spc-framework"));
        aesKey = projectCodeMd5.substring(0, 16);
    }

    /**
     * 创建token，该token相当于jwt，由三部分组成：loginId，password，生成时间，最后经过AES加密返回
     *
     * @param loginId
     * @param password
     * @return
     */
    public static String createToken(String loginId, String password) {
        return SecureUtils.encryptAES(String.format("%s,%s,%s", loginId, password, System.currentTimeMillis()), TokenUtils.getAESKey());
    }

    /**
     * 从token中获取信息
     *
     * @param authToken
     * @return 字符串数组，包含：loginId，password，token生成时间
     */
    public static String[] extractToken(String authToken) {
        String aesKey = TokenUtils.getAESKey();
        try {
            String decryptData = SecureUtils.decryptAES(authToken, aesKey);
            return decryptData.split(",");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(String.format("token 解析失败, token -> %s, key -> %s", authToken, aesKey));
        }

        return null;
    }

    /**
     * 提供一个统一获取AES Key的方法
     *
     * @return
     */
    public static String getAESKey() {
        return aesKey;
    }

}
